松鼠提醒系统架构总览
1. 架构愿景
松鼠提醒采用边缘优先、分层解耦的架构设计,支撑亿级用户的实时位置追踪和智能提醒服务。
核心设计原则: - 🌍 边缘优先:用户请求在最近的边缘节点处理 - ⚡ 无感体验:端到端延迟<100ms,用户无感知 - 🔄 水平扩展:各层独立扩展,支持10倍流量突发 - 💰 成本优化:按需付费,无闲置资源浪费
2. 系统架构总览图
flowchart TB
subgraph 边缘层[☁️ Cloudflare 边缘层 - 250+节点]
CF1[Workers - 状态上报处理]
CF2[Workers KV - 用户配置缓存]
CF3[Durable Objects - WebSocket推送]
end
subgraph 接入层[🌐 腾讯云K8s 接入层 - 香港节点]
LB[Load Balancer]
API1[m01-状态引擎 Pod]
API2[m02-提醒服务 Pod]
end
subgraph 服务层[⚙️ 核心服务层 - K8s Cluster]
SVC1[m03-轨迹处理服务]
SVC2[m04-洞察引擎]
SVC3[m05-商业智能]
CACHE[(Redis Cluster)]
end
subgraph 数据层[💾 数据存储层]
TIDB[(TiDB Cluster<br/>OLTP + TiFlash OLAP)]
CH[(ClickHouse<br/>时序分析)]
R2[Cloudflare R2<br/>轨迹归档]
end
subgraph 客户端[📱 客户端层]
APP1[Flutter App - iOS]
APP2[Flutter App - Android]
WATCH[智能手表]
end
APP1 -->|状态上报| CF1
APP2 -->|状态上报| CF1
WATCH -->|状态同步| CF1
CF1 -->|预处理| LB
CF3 -->|推送提醒| APP1
CF3 -->|推送提醒| APP2
LB --> API1
LB --> API2
API1 --> SVC1
API2 --> SVC2
SVC1 --> CACHE
SVC2 --> CACHE
SVC1 --> TIDB
SVC2 --> TIDB
SVC3 --> CH
SVC1 -.->|归档| R2
TIDB -.->|同步| CH
3. 模块依赖关系图
flowchart LR
subgraph M01[m01 状态感知引擎]
M01A[速度检测]
M01B[屏幕状态]
M01C[手持检测]
end
subgraph M02[m02 提醒服务]
M02A[L2提醒触发]
M02B[通知推送]
M02C[提醒去重]
end
subgraph M03[m03 轨迹处理]
M03A[OD矩阵计算]
M03B[停留点识别]
M03C[轨迹压缩]
end
subgraph M04[m04 洞察引擎]
M04A[人群热力图]
M04B[OD分析]
M04C[异常检测]
end
subgraph M05[m05 商业智能]
M05A[LBS广告投放]
M05B[B端报告生成]
M05C[数据脱敏]
end
M01 -->|状态变更事件| M02
M01 -->|轨迹点| M03
M03 -->|聚合数据| M04
M04 -->|洞察报告| M05
M02 -.->|提醒记录| M03
M04 -.->|人群标签| M02
模块职责说明
| 模块 | 职责 | 依赖 | 被依赖 |
|---|---|---|---|
| m01-状态引擎 | 检测设备状态(速度/屏幕/手持) | - | m02, m03 |
| m02-提醒服务 | L2级提醒触发和推送 | m01, m04 | - |
| m03-轨迹处理 | OD矩阵、停留点、轨迹压缩 | m01 | m04 |
| m04-洞察引擎 | 人群分析、OD洞察、异常检测 | m03 | m05 |
| m05-商业智能 | LBS广告、B端报告、数据变现 | m04 | - |
4. 数据流向图
4.1 实时数据流(状态上报)
sequenceDiagram
participant APP as Flutter App
participant CF as Cloudflare Workers
participant K8s as 腾讯云K8s
participant REDIS as Redis
participant TIDB as TiDB
APP->>CF: 1. POST /api/v1/status<br/>{lat, lng, speed, screen, held}
CF->>CF: 2. 校验 & 预处理
CF->>CF: 3. 查询Workers KV<br/>用户配置/地理围栏
CF->>K8s: 4. 转发处理请求
K8s->>K8s: 5. m01-状态机计算
K8s->>REDIS: 6. 更新实时状态
K8s->>TIDB: 7. 持久化存储
K8s-->>CF: 8. 响应
CF-->>APP: 9. 200 OK<br/>(<50ms)
4.2 提醒触发数据流
sequenceDiagram
participant CF as Cloudflare Workers
participant DO as Durable Objects
participant K8s as 腾讯云K8s
participant REDIS as Redis
participant TIDB as TiDB
loop 每5秒
CF->>K8s: 查询状态变更
end
K8s->>K8s: m01-判断接近中转站
K8s->>REDIS: 查询是否已提醒
K8s->>TIDB: 查询用户配置
K8s->>K8s: m02-触发L2提醒
K8s->>DO: 建立WebSocket连接
DO->>CF: 推送提醒
CF->>APP: WebSocket推送
K8s->>REDIS: 记录提醒状态
K8s->>TIDB: 记录提醒日志
4.3 离线分析数据流(每日批量)
sequenceDiagram
participant TIDB as TiDB
participant CH as ClickHouse
participant M04 as m04-洞察引擎
participant M05 as m05-商业智能
participant S3 as R2对象存储
Note over TIDB,S3: 每日凌晨 02:00
TIDB->>CH: 1. 同步轨迹数据<br/>(TiCDC同步)
CH->>CH: 2. 生成OD矩阵
CH->>CH: 3. 计算人群热力图
CH->>M04: 4. 推送分析结果
M04->>M04: 5. 生成洞察报告
M04->>M05: 6. 人群标签
M05->>TIDB: 7. 更新广告标签
CH->>S3: 8. 归档原始轨迹
TIDB->>TIDB: 9. 清理过期数据
5. 部署拓扑图
flowchart TB
subgraph 用户区域
CN[中国大陆用户]
HK[香港用户]
SG[新加坡用户]
GLOBAL[其他全球用户]
end
subgraph Cloudflare边缘
CF_HK[香港节点<br/>119.28.0.0/14]
CF_SG[新加坡节点]
CF_GLOBAL[全球Anycast]
end
subgraph 腾讯云香港Region
K8S_HK[K8s Cluster<br/>3 Master + 10 Worker]
LB_HK[CLB负载均衡]
end
subgraph TiDB服务
TIDB_HK[TiDB - 香港Region]
TIDB_SG[TiDB - 新加坡Region]
end
CN -->|优化路由| CF_HK
HK --> CF_HK
SG --> CF_SG
GLOBAL --> CF_GLOBAL
CF_HK --> LB_HK
CF_SG --> TIDB_SG
LB_HK --> K8S_HK
K8S_HK --> TIDB_HK
TIDB_HK <-->|双向同步| TIDB_SG
6. 技术栈总结
| 层级 | 技术选型 | 选型理由 |
|---|---|---|
| 客户端 | Flutter + Dart | 跨平台,单代码库支持iOS/Android |
| 边缘层 | Cloudflare Workers | 250+节点,0ms冷启动,按请求计费 |
| 接入层 | 腾讯云K8s (TKE) | 香港Region,低延迟,与TiDB同区 |
| 服务层 | Go + Gin框架 | 高并发,内存占用低,编译快速 |
| 缓存层 | Redis Cluster | 实时状态存储,TTL过期 |
| OLTP数据库 | TiDB Cloud | 分布式SQL,自动分片,HTAP |
| OLAP数据库 | ClickHouse | 列存,高效时序分析 |
| 对象存储 | Cloudflare R2 | S3兼容,无出网费 |
| 消息队列 | Apache Pulsar (预留) | 跨地域复制,持久化 |
7. 性能指标规划
| 指标 | 目标值 | 说明 |
|---|---|---|
| 状态上报延迟 | P99 < 50ms | 边缘节点处理 |
| 提醒触发延迟 | P99 < 100ms | 端到端 |
| 系统可用性 | 99.95% | 全年停机<4小时 |
| 并发用户数 | 1000万 | 同时在线 |
| 日活用户 | 1亿 | DAU |
| 数据写入 | 50万 TPS | 峰值状态上报 |
| 查询响应 | P99 < 200ms | 分析查询 |
8. 相关文档
🐿️ 松鼠提醒项目 | 架构师 @architect-lead | 系统架构总览已建立,各模块可开始详细设计